﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
using Microsoft.VisualBasic.FileIO;
using HREDU.Hoang_Tuan.Classes;

namespace HREDU.Hoang_Tuan
{
    public partial class frmBackup : Form
    {
        private const string CONST_BACKUPNAME = "HreduBackup";

        public bool isBackup = true;
        private string strFolderDLMoi;
        private string strTenCSDL;
        private DataTable bangThongTinTrichLuu = new DataTable();

        public frmBackup(bool isLoai)
        {
            InitializeComponent();

            isBackup = isLoai;
        }

        private void frmBackup_Load(object sender, EventArgs e)
        {
            if (isBackup)
            {
                InitBackupInfo();
            }
            else
            {
                InitRestoreInfo();
            }
        }

        public void InitBackupInfo()
        {
            btDongY.Text = "Sao lưu";
            this.Text = "Sao lưu dữ liệu";
            //chon thu muc cai dat SQL server
            strFolderDLMoi = "C:\\" + CONST_BACKUPNAME;
            //kiem tra xem duong dan nay co khong
            DirectoryInfo thuMucSQL = new DirectoryInfo(strFolderDLMoi);
            if ((thuMucSQL.Exists == false))
            {
                thuMucSQL.Create();
            }
            txtFolderName.Text = strFolderDLMoi;
            txtTenCSDL.Text = CONST_BACKUPNAME + "_" + System.DateTime.Now.Day.ToString() + "-" + System.DateTime.Now.Month.ToString() + "-" + System.DateTime.Now.Year.ToString();
        }

        public void InitRestoreInfo()
        {
            Label1.Visible = false;
            txtTenCSDL.Visible = false;
            btDongY.Text = "Khôi phục";
            this.Text = "Khôi phục dữ liệu";
        }

        private void btDongY_Click(object sender, EventArgs e)
        {
            if (!isBackup)
            {
                MessageBox.Show("Để khôi phục được dữ liệu yêu cầu các máy hiện tại không chạy ứng dụng");
            }
            //kiem tra chi cho trich luu tai may chu - noi chua du lieu
            string tenMayChuChuaDuLieu = MITI.BaseDB.Instance.LayGiaTriThanhPhan("Data Source");
            if ((tenMayChuChuaDuLieu != Environment.MachineName))
            {
                MessageBox.Show("Chỉ hỗ trợ trích lưu tại máy chủ chứa dữ liệu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            if ((string.IsNullOrEmpty(txtFolderName.Text) & string.IsNullOrEmpty(strFolderDLMoi)))
            {
                MessageBox.Show("Chưa chọn thư mục chứa dữ liệu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
            else
            {
                if ((string.IsNullOrEmpty(txtFolderName.Text)))
                {
                    txtFolderName.Text = strFolderDLMoi;
                }
                else
                {
                    strFolderDLMoi = txtFolderName.Text;
                }
            }
            if (isBackup)
            {
                //kiem tra xem nguoi dung co nhap du thong tin
                if ((string.IsNullOrEmpty(txtTenCSDL.Text)))
                {
                    MessageBox.Show("Tên cơ sở dữ liệu chưa có!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                strTenCSDL = txtTenCSDL.Text;
                //kiem tra xem ten thu muc va ten co so du lieu co qua dai hay khong
                if ((txtFolderName.Text.Length > 255))
                {
                    MessageBox.Show("Tên thư mục không được quá 255 ký tự!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if ((txtTenCSDL.Text.Length > 50))
                {
                    MessageBox.Show("Tên CSDL không được quá 50 ký tự!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                if ((BackupCSDL() == false))
                {
                    MessageBox.Show("Sao lưu dữ liệu không thành công. Có thể bạn không có quyền trích lưu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show("Sao lưu dữ liệu thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
            }
            else
            {
            }
            //If (RestoreCSDL() = False) Then
            // MessageBox.Show("Sao lưu dữ liệu không thành công. Có thể bạn không có quyền trích lưu!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            //Else
            // MessageBox.Show("Sao lưu dữ liệu thành công!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information)
            // Me.Close()
            //End If
        }
        private bool BackupCSDL()
        {
            bool kq = true;
            string strFileBackUp = txtFolderName.Text + "\\" + strTenCSDL + ".dat";
            this.Cursor = Cursors.WaitCursor;
            File.Delete(strFileBackUp);
            string strOldDB = MITI.BaseDB.Instance.LayGiaTriThanhPhan("Initial Catalog");
            string cauLenh = " BACKUP DATABASE [" + strOldDB + "] To Disk ='" + strFileBackUp + "'";
            if (MITI.BaseDB.Instance.ExecSql_NoneQuery(cauLenh) == 0)            
            {
                kq = false;
                this.Cursor = Cursors.Arrow;
                return kq;
            }
            this.Cursor = Cursors.Arrow;
            return kq;
        }

        private void btDongForm_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btBrowse_Click(object sender, EventArgs e)
        {
            if (isBackup)
            {
                //mo form cho nguoi ta chon co so du lieu
                FolderBrowserDialog.SelectedPath = "";
                txtFolderName.Text = "";
                FolderBrowserDialog.ShowDialog();
                txtFolderName.Text = FolderBrowserDialog.SelectedPath;
            }
            else
            {
                //mo form cho nguoi ta chon co so du lieu
                OpenFileDialog1.Filter = "Backup File(*.bak;*.dat)|*.bak;*.dat|All files (*.*)|*.*";
                FolderBrowserDialog.SelectedPath = "";
                txtFolderName.Text = "";
                OpenFileDialog1.ShowDialog();
                txtFolderName.Text = OpenFileDialog1.FileName;
            }
        }
    }

}